import unittest
from node import Node
from tree import Tree

class TestNode(unittest.TestCase):

    def setUp(self):
        self.root = Node("root", style=Node.ROOT)
        self.nodeA = Node("A", self.root, style=Node.NORM)
        self.nodeB = Node("B", self.nodeA, style=Node.NORM)
        self.nodeC = Node("C", self.nodeA, style=Node.NORM)
        self.nodeD = Node("D", self.nodeB, style=Node.NORM)
        self.nodeE = Node("E", self.nodeC, style=Node.NORM)
        self.nodeF = Node("F", self.nodeC, style=Node.NORM)
        self.root.setChild1(self.nodeA)
        self.nodeA.setChild1(self.nodeB)
        self.nodeA.setChild2(self.nodeC)
        self.nodeB.setChild2(self.nodeD)
        self.nodeC.setChild1(self.nodeE)
        self.nodeC.setChild2(self.nodeF)

    def test_addChild(self):
        return

    def test_parent(self):
        self.assertTrue(self.nodeF.getParent() == self.nodeC)
        self.assertTrue(self.nodeE.getParent() == self.nodeC)
        self.assertTrue(self.nodeD.getParent() == self.nodeB)
        self.assertTrue(self.nodeB.getParent() == self.nodeA)
        self.assertTrue(self.nodeC.getParent() == self.nodeA)

    def getChild(self):
        self.assertTrue(self.nodeA.getChild1().getParent() == self.nodeA)
        self.assertTrue(self.nodeA.getChild1() == self.nodeB)
        self.assertTrue(self.nodeA.getChild2().getParent() == self.nodeA)
        self.assertTrue(self.nodeA.getChild2() == self.nodeC)

    def test_rotation(self):
        self.nodeC.rotation()
        print "Child1 " + self.nodeC.getChild1().getLabel()
        self.assertTrue(self.nodeC.getChild1() == self.nodeA)
        self.assertTrue(self.nodeC.getChild2() == self.nodeF)
        self.assertTrue(self.nodeA.getChild2() == self.nodeE)
        self.assertTrue(self.nodeA.getParent() == self.nodeC)

        self.nodeB.rotation()
        self.assertTrue(self.nodeB.getChild2() == self.nodeA)
        self.assertTrue(self.nodeA.getChild1() == self.nodeD)
        self.assertTrue(self.nodeA.getChild2() == self.nodeE)
        self.assertTrue(self.nodeC.getChild1() == self.nodeB)
        self.assertTrue(self.nodeB.getChild1() == None)
        return

    def test_iterator(self):
        tree = Tree(self.root)
        nodes = []
        for node in tree.iterator(self.root):
            nodes.append(node)
        self.assertTrue(nodes == [self.nodeB, self.nodeD, self.nodeA, self.nodeE,
                                  self.nodeC, self.nodeF, self.root])

if __name__ == '__main__':
    unittest.main()

    
